package cn.ike.service.system.impl;

import cn.ike.dao.system.RoleDao;
import cn.ike.domain.system.Module;
import cn.ike.domain.system.Role;
import cn.ike.service.system.RoleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class RoleServiceImpl implements RoleService {

    // 注入RoleDao
    @Autowired
    private RoleDao roleDao;
    /**
     * 根据企业id查询全部角色
     * @param companyId
     */
    @Override
    public List<Role> findAll(String companyId) {
        return roleDao.findAll(companyId);
    }

    /**
     * 分页查询全部角色
     * @param companyId
     * @param pageNum
     * @param pageSize
     */
    @Override
    public PageInfo<Role> findByPage(String companyId, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<Role> roleList = roleDao.findAll(companyId);
        return new PageInfo<>(roleList);
    }

    /**
     * 根据id查询角色
     * @param roleId
     */
    @Override
    public Role findById(String roleId) {
        return roleDao.findById(roleId);
    }

    /**
     * 添加角色
     * @param role
     */
    @Override
    public void save(Role role) {
        role.setId(UUID.randomUUID().toString());
        roleDao.save(role);
    }

    /**
     * 修改角色
     * @param role
     */
    @Override
    public void update(Role role) {
        roleDao.update(role);
    }

    /**
     * 删除角色
     * @param roleId
     */
    @Override
    public boolean delete(String roleId) {
        Long userRoleByUserId = roleDao.findUserRoleByRoleId(roleId);
        if (userRoleByUserId == 0){
            // 沒有外鍵关联
            roleDao.delete(roleId);
            return true;
        }
        return false;
    }

    /**
     * 根据用户id查询用户角色
     * @param userId
     * @return
     */
    @Override
    public List<Role> findUserRole(String userId) {
        return roleDao.findUserRole(userId);
    }
}
